home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swagd_f.zip
/
ENTRY.SWG
/
0008_Masked Input.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-01-27
|
3KB
|
96 lines
{
> The text on the screen would be something like:
> What is your phone number? ( ) -
> ^^^ ^^^ ^^^^
> But text could only be entered at the marked locations. As soon as one
> section is full it would move to the one beside it but read in a different
> variable..
How about this: (it's tested, BTW)
}
USES Crt;
VAR
ts : String;
PROCEDURE MaskedReadLn(VAR s : String; mask : String; fillCh : Char);
{ in 'mask', chars with A will only accept alpha input, and chars
with 0 will only accept numeric input; spaces accept anything }
VAR ch : Char; sx, ox, oy : Byte;
BEGIN
s := ''; ox := WhereX; oy := WhereY; sx := 0;
REPEAT
Inc(sx);
IF (mask[sx] IN ['0', 'A']) THEN
Write(fillCh)
ELSE IF (mask[sx] = '_') THEN
Write(' ')
ELSE Write(mask[sx]);
UNTIL (sx = Length(mask));
sx := 0;
WHILE (NOT (mask[sx + 1] IN [#32, '0', 'A']))
AND (sx < Length(mask)) DO BEGIN
Inc(sx);
s := s + mask[sx];
END;
GotoXY(ox + sx, oy);
REPEAT
ch := ReadKey;
IF (ch = #8) THEN BEGIN
IF (Length(s) > sx) THEN BEGIN
IF NOT (mask[Length(s)] IN [#32, '0', 'A']) THEN BEGIN
REPEAT
s[0] := Chr(Length(s) - 1);
GotoXY(WhereX - 1, WhereY);
UNTIL (Length(s) <= sx) OR (mask[Length(s)] IN [#32, '0', 'A']);
END;
s[0] := Chr(Length(s) - 1); GotoXY(WhereX - 1, WhereY);
Write(fillCh); GotoXY(WhereX - 1, WhereY);
END ELSE BEGIN
Sound(440);
Delay(50);
NoSound;
END;
END ELSE IF (Length(s) < Length(mask)) THEN BEGIN
CASE mask[Length(s) + 1] OF
'0' : IF (ch IN ['0'..'9']) THEN BEGIN
Write(ch);
s := s + ch;
END;
'A' : IF (UpCase(ch) IN ['A'..'Z']) THEN BEGIN
Write(ch);
s := s + ch;
END;
#32 : BEGIN
Write(ch);
s := s + ch;
END;
END;
WHILE (Length(s) < Length(mask))
AND (NOT (mask[Length(s) + 1] IN [#32, '0', 'A'])) DO BEGIN
IF (mask[Length(s) + 1] = '_') THEN s := s + ' ' ELSE
s := s + mask[Length(s) + 1];
GotoXY(WhereX + 1, WhereY);
END;
END;
UNTIL (ch IN [#13, #27]);
END;
BEGIN
ClrScr;
Write('Enter phone number: ');
MaskedReadLn(ts, '(000)_000-0000', '_');
WriteLn;
Write('Enter postal code: ');
MaskedReadLn(ts, 'A0A_0A0', '_');
WriteLn;
END.
{
It can be improved with colours and such stuff, but it may suit your
needs without enhancement. If you have questions about how this works,
feel free to ask.
}